package estate;

import java.util.Comparator;
import java.util.HashMap;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author Wlodek
 */
public class DekoratorLokalowy extends Dekorator {

    private int typ_lokalu;
    private int liczba_lazieniek;
    private int pietro;
    private boolean czy_rozkladowy;
    private String forma_wlasnosci;
    private int numer_lokalu;

    public int getTypLokalu() {
        return typ_lokalu;
    }

    public int getLiczbaLazieniek() {
        return liczba_lazieniek;
    }

    public int getPietro() {
        return pietro;
    }

    public boolean getCzyRozkladowy() {
        return czy_rozkladowy;
    }

    public String getFormaWlasnosci() {
        return forma_wlasnosci;
    }

    public int getNumerLokalu() {
        return numer_lokalu;
    }

    @Override
    public void dekoruj(HashMap<String, Object> hm) {
        this.typ_lokalu = (Integer) hm.get("typ_lokalu");
        this.liczba_lazieniek = (Integer) hm.get("liczba_lazieniek");
        this.pietro = (Integer) hm.get("pietro");
        this.czy_rozkladowy = (Boolean) hm.get("czy_rozkladowy");
        this.forma_wlasnosci = (String) hm.get("forma_wlasnosci");
        this.numer_lokalu = (Integer) hm.get("numer_lokalu");

        this.element.dekoruj(hm);
    }

    public DekoratorLokalowy(Estate e) {
        super(e);
    }

    @Override
    public boolean equals(Object e) {
        DekoratorLokalowy pe = (DekoratorLokalowy) e;
        if (this.typ_lokalu == pe.typ_lokalu &&
                this.liczba_lazieniek == pe.liczba_lazieniek &&
                this.pietro == pe.pietro &&
                this.czy_rozkladowy == pe.czy_rozkladowy &&
                this.forma_wlasnosci.equals(pe.forma_wlasnosci) &&
                this.numer_lokalu == pe.numer_lokalu &&
                element.equals(pe.element)) {
            return true;
        } else {
            return false;
        }
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 71 * hash + this.typ_lokalu;
        hash = 71 * hash + this.liczba_lazieniek;
        hash = 71 * hash + this.pietro;
        hash = 71 * hash + (this.czy_rozkladowy ? 1 : 0);
        hash = 71 * hash + (this.forma_wlasnosci != null ? this.forma_wlasnosci.hashCode() : 0);
        hash = 71 * hash + this.numer_lokalu;
        return hash;
    }

    @Override
    public int compareTo(Estate arg1) {
        int wynik;
        DekoratorLokalowy arg= (DekoratorLokalowy)arg1;
        wynik = element.compareTo(arg.element);
        if (wynik != 0) {
            if (getLiczbaLazieniek() != arg.getLiczbaLazieniek()) //sortowanie po liczbie pokoi
            {
                return arg.getLiczbaLazieniek() - getLiczbaLazieniek();
            } else if (getPietro() != arg.getPietro()) //im mniejsze piętro, tym lepsza Estate
            {
                return getPietro() - arg.getPietro();
            } else if (getCzyRozkladowy() != arg.getCzyRozkladowy()) { //jeżeli pierwsze mieszkanie jest rozkładowe, to znaczy że jest lepsze
                if (getCzyRozkladowy() == true) {
                    return 1;
                } else {
                    return 0;
                }
            }
        }
        return 0;

    }
  @Override
    public void setUser(User user)
    {
        element.setUser(user);
    }

    @Override
   public String toString()
    { String pom=element.toString();
     pom+="1: "+typ_lokalu+" 2: "+liczba_lazieniek+" 3: "+ pietro+" 4: "+czy_rozkladowy+
              " 5: "+forma_wlasnosci+" 6: "+numer_lokalu;
      return pom;
    }


    @Override
    public boolean rPlaceByCzyRozkladowy() {
        return czy_rozkladowy;
    }

    @Override
    public int rPlaceByLiczbaPieter() {
        return element.rPlaceByLiczbaPieter();
    }

    @Override
    public int rPlaceByRokBudowy() {
        return element.rPlaceByRokBudowy();
    }

    @Override
    public int rPlaceByliczbaPokoi() {
        return liczba_lazieniek;
    }

    @Override
    public int rPlaceByMetraz() {
        return element.rPlaceByMetraz();
    }

    @Override
    public int rPlaceByCena() {
        return element.rPlaceByCena();
    }

}
